import { defineConfig, loadEnv } from 'vite'
import vue from '@vitejs/plugin-vue'
import { resolve } from 'path'
// vite 样式按需导入
// import VitePluginElementPlus from 'vite-plugin-element-plus'

import AutoImport from 'unplugin-auto-import/vite'
import Components from 'unplugin-vue-components/vite'
import { ElementPlusResolver } from 'unplugin-vue-components/resolvers'

// https://vitejs.dev/config/
export default ({ mode }) => {
  const env = loadEnv(mode, process.cwd())

  return defineConfig({
    plugins: [
      vue(),
      // VitePluginElementPlus({
      //   // 如果需要使用component name.scss 源文件 就需要将下面的注释取消
      //   // useSource:true
      //   format: mode === 'development' ? 'esm' : 'cjs',
      // })
      AutoImport({
        // 自动导入 Element Plus 相关函数
        resolvers: [ElementPlusResolver()]
      }),
      Components({
        // 自动导入 Element Plus 组件
        resolvers: [ElementPlusResolver()]
      })
    ],
    server: {
      // 解决 vite use-host to expose
      https: false, // 是否开启 https
      host: '0.0.0.0',
      port: 6580, // 端口号
      // open: false, // 项目启动时是否自动打开
      Proxy: {
        // 代理所有 /api 的请求
        [env.VITE_API_BASE]: {
          // 代理请求之后的请求地址
          target: env.VITE_API_URL,
          // 跨域配置
          changeOrigin: true
        }
      }
    },
    resolve: {
      alias: [
        // 配置根路径
        {
          find: '@',
          replacement: resolve(__dirname, 'src')
        }
      ],
      extensions: ['.js', '.vue', '.ts', '.tsx', '.json']
    },
    css: {},
    build: {
      outDir: 'dist',

      assetsDir: 'assets', //指定静态资源存放路径
      sourcemap: false, //是否构建source map 文件

      minify: 'terser', // 混淆器，terser 构建后文件体积更小，'terser' | 'esbuild'
      chunkSizeWarningLimit: 1500, //chunk 大小警告的限制，默认500KB
      rollupOptions: {
        output: {
          // 最小化拆分包
          manualChunks(id) {
            if (id.includes('node_modules')) {
              return id.toString().split('node_modules/')[1].split('/')[0].toString()
            }
          },
          chunkFileNames: 'js/[name].[hash].js' // 用于命名代码拆分时创建的共享块的输出命名，[name]表示文件名,[hash]表示该文件内容hash值
        }
      },
      terserOptions: {
        // 生产环境移除console
        // compress: {
        //   drop_console: true,
        //   drop_debugger: true,
        // },

        output: {
          comments: true // 去掉注释内容
        }
      }
    }
  })
}
